// 文件下载工具类
export class FileDownloadUtil {

    /**
     * 下载文本文件
     * @param {string} content - 文件内容
     * @param {string} filename - 文件名
     * @param {string} mimeType - MIME类型，默认为text/plain
     */
    static downloadTextFile(content, filename, mimeType = 'text/plain;charset=utf-8') {
        // #ifdef H5
        // H5环境支持直接下载
        try {
            const blob = new Blob([content], { type: mimeType })
            const url = URL.createObjectURL(blob)
            const link = document.createElement('a')
            link.href = url
            link.download = filename
            document.body.appendChild(link)
            link.click()
            document.body.removeChild(link)
            URL.revokeObjectURL(url)
            return { success: true, message: '文件下载成功' }
        } catch (error) {
            console.error('H5下载失败:', error)
            return { success: false, message: '下载失败', error }
        }
        // #endif

        // #ifdef MP-WEIXIN
        // 微信小程序环境，复制到剪贴板
        return new Promise((resolve) => {
            uni.showModal({
                title: '下载提示',
                content: '小程序环境暂不支持直接下载文件，是否复制内容到剪贴板？',
                showCancel: true,
                cancelText: '取消',
                confirmText: '复制内容',
                success: (res) => {
                    if (res.confirm) {
                        uni.setClipboardData({
                            data: content,
                            success: () => {
                                resolve({ success: true, message: '内容已复制到剪贴板' })
                            },
                            fail: (error) => {
                                resolve({ success: false, message: '复制失败', error })
                            }
                        })
                    } else {
                        resolve({ success: false, message: '用户取消操作' })
                    }
                }
            })
        })
        // #endif

        // #ifdef APP-PLUS
        // App环境，保存到本地文件
        return new Promise((resolve) => {
            try {
                const fs = plus.io.requestFileSystem(plus.io.PRIVATE_DOC, (fs) => {
                    fs.root.getFile(filename, { create: true }, (fileEntry) => {
                        fileEntry.createWriter((writer) => {
                            writer.onwrite = () => {
                                resolve({
                                    success: true,
                                    message: '文件保存成功',
                                    path: fileEntry.fullPath
                                })
                            }
                            writer.onerror = (error) => {
                                resolve({ success: false, message: '文件保存失败', error })
                            }
                            writer.write(content)
                        }, (error) => {
                            resolve({ success: false, message: '创建写入器失败', error })
                        })
                    }, (error) => {
                        resolve({ success: false, message: '创建文件失败', error })
                    })
                }, (error) => {
                    resolve({ success: false, message: '请求文件系统失败', error })
                })
            } catch (error) {
                resolve({ success: false, message: 'App下载异常', error })
            }
        })
        // #endif

        // 其他平台默认处理
        return { success: false, message: '当前平台不支持文件下载' }
    }

    /**
     * 生成带时间戳的文件名
     * @param {string} baseName - 基础文件名
     * @param {string} extension - 文件扩展名
     * @returns {string} 完整文件名
     */
    static generateTimestampFilename(baseName, extension = 'txt') {
        const now = new Date()
        const timestamp = now.toISOString()
            .slice(0, 19)
            .replace(/[:-]/g, '')
            .replace('T', '_')
        return `${baseName}_${timestamp}.${extension}`
    }

    /**
     * 格式化报告内容
     * @param {Object} reportData - 报告数据
     * @returns {string} 格式化后的报告内容
     */
    static formatReportContent(reportData) {
        const {
            factoryName,
            location,
            assessmentTime,
            riskFactors,
            surroundingEnvironment,
            historicalAccidents,
            riskLevel,
            recommendations
        } = reportData

        return `风险评估报告
${'='.repeat(50)}

工厂名称：${factoryName || '未知'}
评估时间：${assessmentTime || new Date().toLocaleString('zh-CN')}
工厂位置：${location || '未知'}

一、风险因素分析
${'-'.repeat(30)}
${riskFactors || '暂无数据'}

二、周边环境评估
${'-'.repeat(30)}
${surroundingEnvironment || '暂无数据'}

三、历史事故记录
${'-'.repeat(30)}
${historicalAccidents || '暂无数据'}

四、综合风险评级
${'-'.repeat(30)}
${riskLevel || '中等风险'}

五、建议措施
${'-'.repeat(30)}
${recommendations || `1. 加强日常监测和维护
2. 完善应急预案和响应机制
3. 定期开展环境影响评估
4. 加强与周边社区的沟通协调`}

${'='.repeat(50)}
报告生成时间：${new Date().toLocaleString('zh-CN')}
系统版本：水质监测系统 v1.0
`
    }
}

export default FileDownloadUtil